#pragma once

#include  "iostream"
#include  "vector"
#include  "stack"
#include  "unordered_map"
#include   "queue"

using namespace std;

/**
 *
 *1004. 最大连续1的个数 III
中等
499
相关企业
给定一个二进制数组 nums 和一个整数 k，如果可以翻转最多 k 个 0 ，则返回 数组中连续 1 的最大个数 。

示例 1：

输入：nums = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出：6
解释：[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1，最长的子数组长度为 6。
示例 2：

输入：nums = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出：10
解释：[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1，最长的子数组长度为 10。
 *
 * */

//滑动窗口还算不太熟
int longestOnes(vector<int> &nums, int k) {

    int left = 0;
    int res[2] = {0};//存储01的个数
    int ret = 0;
    for (int right = 0; right < nums.size(); ++right) {
        res[nums[right]]++;

        if (res[0] > k) {
            res[nums[left]]--;
            left++;
        }

        ret = max(ret, right - left + 1);


    }


    return ret;
}